package com.jerry.hm.datastructure.blockingqueue;

/**
 * 阻塞队列
 *
 * @author Jerry
 * @since 2024/10/6 16:55
 */
public interface BlockingQueue<E> {

    /**
     * 添加一个元素，如果队列满则阻塞
     *
     * @param e
     * @throws InterruptedException
     */
    void offer(E e) throws InterruptedException;

    /**
     * 指定时间内添加一个元素，如果队列满则阻塞
     *
     * @param e
     * @param timeout 毫秒数
     * @return 添加成功或者失败
     * @throws InterruptedException
     */
    boolean offer(E e, long timeout) throws InterruptedException;

    /**
     * 移除一个元素，如果队列空则阻塞
     *
     * @return
     * @throws InterruptedException
     */
    E poll() throws InterruptedException;

    /**
     * 指定时间内移除一个元素，如果队列空则阻塞
     *
     * @return
     * @throws InterruptedException
     */
    E poll(long timeout) throws InterruptedException;
}
